"""日志工具模块

提供统一的日志记录功能，支持控制台和文件输出，以及不同级别的日志记录。
支持彩色日志输出，提高日志的可读性。
"""

import logging
import os
from pathlib import Path

# 尝试导入彩色日志模块
try:
    import colorlog
    HAS_COLORLOG = True
except ImportError:
    HAS_COLORLOG = False
    print("警告: 未安装 colorlog 库，将使用标准日志输出。")
    print("请运行: pip install colorlog")

# 创建日志目录
LOG_DIR = Path(os.getenv('LOG_DIR', 'logs'))
LOG_DIR.mkdir(exist_ok=True)

# 日志级别映射
LOG_LEVELS = {
    'debug': logging.DEBUG,
    'info': logging.INFO,
    'warning': logging.WARNING,
    'error': logging.ERROR,
    'critical': logging.CRITICAL
}

# 默认日志级别
DEFAULT_LOG_LEVEL = os.getenv('LOG_LEVEL', 'info').lower()

# 创建日志记录器
def get_logger(name='kg_rag', level=None):
    """获取配置好的日志记录器
    
    参数:
        name (str): 日志记录器名称
        level (str): 日志级别，可选值：debug, info, warning, error, critical
        
    返回:
        logging.Logger: 配置好的日志记录器
    """
    level = level or DEFAULT_LOG_LEVEL
    log_level = LOG_LEVELS.get(level.lower(), logging.INFO)
    
    # 创建日志记录器
    logger = logging.getLogger(name)
    logger.setLevel(log_level)
    
    # 如果已经有处理器，不再添加
    if logger.handlers:
        return logger
    
    # 创建控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(log_level)
    
    # 创建文件处理器
    file_handler = logging.FileHandler(LOG_DIR / f"{name}.log", encoding='utf-8')
    file_handler.setLevel(log_level)
    
    # 创建格式化器
    if HAS_COLORLOG:
        # 彩色日志格式
        color_formatter = colorlog.ColoredFormatter(
            '%(log_color)s%(asctime)s - %(name)s - %(levelname)s - %(message)s',
            log_colors={
                'DEBUG': 'cyan',
                'INFO': 'green',
                'WARNING': 'yellow',
                'ERROR': 'red',
                'CRITICAL': 'red,bg_white',
            }
        )
        console_handler.setFormatter(color_formatter)
    else:
        # 标准日志格式
        formatter = logging.Formatter(
            '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
        )
        console_handler.setFormatter(formatter)
    
    # 文件日志使用标准格式
    file_formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    )
    file_handler.setFormatter(file_formatter)
    
    # 添加处理器
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
    
    return logger